home *** CD-ROM | disk | FTP | other *** search
/ Adobe Graphics & Publishing SDK 1996 December / Adobe Graphics & Publishing SDK 1996 December.iso / pc / pm65sdk / sourcecode / includes / citext.h < prev    next >
C/C++ Source or Header  |  1996-11-18  |  16KB  |  376 lines

  1. /***[f*****************************************************************
  2.  *    CITEXT.H    -- PageMaker Text Interface. 
  3.  *
  4.  *    Copyright 1996 (c) Adobe Systems, Inc. All Rights Reserved
  5.  *
  6.  *    
  7.  ***f]*****************************************************************/
  8.   
  9. #ifndef __CITEXT_H
  10. #define __CITEXT_H
  11.  
  12. #include "pmtypes.h"
  13. #include "CIObjectAccess.h"
  14.  
  15. //    Information about the contents of
  16. //    a PageMaker text hole object.
  17. //
  18. typedef struct _PMTextBlockInfo {
  19.     unsigned short    bNeedsComposing;
  20.     unsigned long    startCharNum;    // relative to whole story
  21.     unsigned long    startLineNum;    // relative to whole story
  22.     unsigned short    numChars;        // num chars in text block
  23.     unsigned short    numLines;        // num lines in text block
  24.     unsigned long    storyID;
  25.     unsigned long    indexInStory;    // order of text block in series
  26.                                     // of story's text blocks. First
  27.                                     // text block is index 1.
  28.     unsigned long    prevBlockID;    // ID of text block before this one
  29.     unsigned long    nextBlockID;    // ID of text block following this one
  30.                                     // To get the given text block's ID, use
  31.                                     // CIObjectAccess::GetObjID().
  32. } PMTextBlockInfo;
  33.  
  34. //    Information about a line (including linebreak)
  35. //
  36. typedef enum _PMLineBreakType {
  37.     PMLB_AutoWrapIntrusion, // autowrap intrusion
  38.     PMLB_Overset,            // text is overset
  39.     PMLB_Hard,                // hard line end (end of para.)
  40.     PMLB_Tab,                // break caused by tab
  41.     PMLB_Force                // forced line end (no para. end)
  42. } PMLineBreakType;
  43.  
  44. typedef struct _PMLineInfo {
  45.     unsigned long    nCharCount;
  46.     PMLineBreakType    cLineBreakType;
  47.     unsigned long    nLineHeight;
  48.     unsigned long    nComposeWidth;
  49.     unsigned long    nLineNumber;
  50.     unsigned long    endwithdischy : 1;    // lbrk ends with dischyish char
  51.     unsigned long    kernpairsexist : 1;    // pairkerning applied to lbrk
  52.     unsigned long    letterspacing : 1;    // set if lbrk was letterspaced
  53.     unsigned long    funnyhyphenation: 1;// for German, Swiss... 
  54.     unsigned long    endwithladder : 1;    // T = ends with ladder-rung char
  55.     unsigned long    needscomposing  : 1;// Set if line needs composing.
  56.     unsigned long    badwidth : 1;        // text is loose or tight
  57.     unsigned long    badkeep : 1;        // pagination broke a keep rule
  58.     unsigned long    graphic : 1;        // T = lbrk has in-line graphic
  59. } PMLineInfo;
  60.  
  61. //    Information about a story
  62. //
  63. typedef struct _PMStoryInfo {
  64.     unsigned long    nNumChars;
  65.     unsigned long    nNumLines;
  66.     unsigned long    nNumTxtBlock;
  67.     unsigned long    firstBlockID;    // ID of first text block before this one
  68. } PMStoryInfo;
  69.  
  70. #define PMFACENAMESIZE    64
  71. #define PMCOLORNAMESIZE 32
  72. #define PMSTYLENAMESIZE    32
  73.  
  74. //-----------------------------------------------------------
  75. // Character Format Information
  76. typedef struct _PMCharFormatInfo {
  77.     unsigned long nNumChars;        // number of chars in the text run
  78.     unsigned long nOffset;            // char offset relative to the current
  79.                                     // text run (based on the targetCharOffset
  80.                                     // (which is relative to the entire story).
  81.     char faceName[PMFACENAMESIZE];    // face name
  82.     unsigned short size;            // font size in tenth points
  83.                                     // (float fsize=size/10); 
  84.     short leading;                    // font leading in tenth points
  85.                                     // (float fleading=leading/10)
  86.                                     // -1 means auto leading
  87.     char colorName[PMCOLORNAMESIZE];// font color name
  88.                                     // style bits (bold, italic, etc.)
  89.     unsigned long plain : 1;        // none of the others
  90.     unsigned long bold : 1;            // bold
  91.     unsigned long italic : 1;        // italic
  92.     unsigned long underline : 1;    // underlined
  93.     unsigned long outline : 1;        // outline chars
  94.     unsigned long shadow : 1;        // drop shadow
  95.     unsigned long condense : 1;        // narrow chars
  96.     unsigned long extend : 1;        // wide chars
  97.     unsigned long hidden : 1;        // hidden text
  98.     unsigned long strickout : 1;    // struck-through
  99.     unsigned long superscript : 1;    // superscripted
  100.     unsigned long subscript : 1;    // subscripted
  101.     unsigned long allcaps : 1;        // all caps
  102.     unsigned long smallcaps : 1;    // small caps
  103.     unsigned long reverse : 1;        // reverse
  104.     short setwidth;                    // set pointsize (tenth points),
  105.                                     // or -1 for square
  106.                                     // tracking
  107.     unsigned short notrack : 1;
  108.     unsigned short verytight : 1;
  109.     unsigned short tight : 1;
  110.     unsigned short normal : 1;
  111.     unsigned short loose : 1;
  112.     unsigned short veryloose : 1;
  113.                                     // general character info
  114.     unsigned short isinline : 1;    // is inline graphics
  115.     unsigned short nobreak : 1;        // 1 if no breaks allowed in this run
  116.     short kernamt;                    // manual kern adjustment, in 1/1000th of em
  117.     unsigned short smcapsize;        // smallcap size, tenths of % of orig. font height
  118.     unsigned short supersubsize;    // sub/superscript size, tenths of % of font height
  119.     unsigned short subscriptpos;    // subscript pos, tenths of % of font height
  120.     unsigned short superscriptpos;    // superscript pos, tenths of % of font height
  121.     short baselineshift;            // baseline shift in signed twips
  122.     unsigned short objTintAmt;         // object-level tint value for the CFmt, 0=0%, 100=100%
  123. } PMCharFormatInfo;
  124.  
  125.  
  126. //-----------------------------------------------------------
  127. // Paragraph Format Information
  128. typedef enum _PMParaAlign {
  129.     PMPara_Left = 0,            // left justified (ragged right)
  130.     PMPara_Right = 1,            // right justified (ragged left)
  131.     PMPara_Center = 2,            // centered (ragged left and right) 
  132.     PMPara_Justify = 3,            // justified (no ragged)
  133.     PMPara_ForceJustify = 4        // force justified (justify all lines)
  134. } PMParaAlign;
  135.  
  136. typedef enum _PMHyphLevel {
  137.     PMHyph_Off=0,
  138.     PMHyph_Fair=1,
  139.     PMHyph_Good=2,
  140.     PMHyph_Best=3,
  141.     PMHyph_Manual=4
  142. } PMHyphLevel;
  143.  
  144. typedef enum _PMLeadMethod {
  145.     PMLead_None=0,
  146.     PMLead_Proportional=1,
  147.     PMLead_TopOfCaps=2,
  148.     PMLead_Baseline=3
  149. } PMLeadMethod;
  150.  
  151. typedef enum _PMLineStyle {
  152.     PMLine_Solid=0,
  153.     PMLine_ThinThin=1,
  154.     PMLine_ThickThin=2,
  155.     PMLine_ThinThick=3,
  156.     PMLine_ThinThickThin=4,
  157.     PMLine_ThinDash=5,
  158.     PMLine_Squares = 6,
  159.     PMLine_Dots = 7,
  160.     PMLine_None = 8
  161. } PMLineStyle;
  162.  
  163. /*      Structures within the PMParaFormatInfo, 
  164.  *      Note that 'gridit' (in flags) really applies to the line rather
  165.  *      than any individual rule.  The value of gridit should be the same
  166.  *      for both above and below.
  167.  */
  168. typedef struct _PMParaRule {
  169.     unsigned short ruleExists : 1;    // this rule exists/valid
  170.     unsigned short useTextWidth : 1;// TRUE - text width, F = column width
  171.     unsigned short gridIt : 1;        // TRUE - adjust line break depth for grid
  172.     unsigned short transparent : 1;    // TRUE if transparent, opaque otherwise.
  173.     PMLineStyle lineStyle;            // line style
  174.     unsigned short lineWeight;        // line weight in points (scaled by 10)
  175.     char colorName[PMCOLORNAMESIZE];// color name
  176.     unsigned short objTintAmt;        // Object-level tint
  177.     short leftOffset;        // offset from margin to left edge of rule
  178.     short rightOffset;        // offset from margin to right edge of rule    
  179.     short height;            // distance from text baseline to top/bot
  180.     
  181. } PMParaRule;
  182.  
  183. typedef struct _PMParaFormatInfo {
  184.     unsigned long nNumChars;    // number of chars in the text run
  185.     unsigned long nOffset;        // char offset relative to the current
  186.                                 // text run (based on the targetCharOffset
  187.                                 // (which is relative to the entire story).
  188.     char            styleName[PMSTYLENAMESIZE];    // style name
  189.     PMParaAlign        align;
  190.     PMHyphLevel        hyphenLevel;// hyphenation level
  191.     PMLeadMethod    leadMethod;    // leading method
  192.     char            languageName[64];
  193.     unsigned short    includeTOC : 1;    // 1 to include table of content, 0 otherwise
  194.     unsigned short    pairkern : 1;    // 1 is on, 0 is off
  195.     short            indleft;    // left indent in twips
  196.     short            indfirst;    // first line of paragraph indent in twips
  197.     short            indright;    // right indent in twips
  198.     short            spbefore;    // extra space before paragraph in twips
  199.     short            spafter;    // extra space after paragraph in twips
  200.     unsigned short    kernsize;    // size above which we must kern (scale by 10)
  201.                                 // real kern size is: float realsize = kernsize/10
  202.     short leadpct;                // Autolead percentage.
  203.     short minband;                // minimum spaceband width
  204.     short maxband;                // maximum spaceband width
  205.     short desband;                // desired spaceband width
  206.     short minltrsp;                // minimum letterspacing
  207.     short maxltrsp;                // maximum letterspacing
  208.     short desltrsp;                // desired letterspacing
  209.     short hotzone;                // hot zone width for ragged hyphenation in twips
  210.     unsigned short    maxhyphens;    // max consecutive hyphens allowed
  211.                                 // for keeps/breaks...
  212.     unsigned short    keepTogether:1;
  213.     unsigned short    keepColumnBreak:1;
  214.     unsigned short    keepPageBreak:1;
  215.     unsigned short    keepFollow:2;
  216.     unsigned short    keepWidow:2;
  217.     unsigned short    keepOrphan:2;
  218.     unsigned short    usegrid;    // leading for para's grid (twips), or NO_GRID
  219.     PMParaRule        ruleAbove;    // rule above info
  220.     PMParaRule        ruleBelow;    // rule below info
  221. } PMParaFormatInfo;
  222.  
  223. //-----------------------------------------------------------
  224. // Tab Format Information
  225. #define MAXTABS    40            // maximum number of tabs
  226.  
  227. typedef enum _PMTabAlign {
  228.     PMTab_Left=0,
  229.     PMTab_Right=1,
  230.     PMTab_Center=2,
  231.     PMTab_Decimal=3
  232. } PMTabAlign;
  233.  
  234. typedef struct _PMTabStop {
  235.     short pos;                // in Twips
  236.     PMTabAlign align;        // tab alignment
  237.     char leaderPair[2];        // tab leader pair
  238. } PMTabStop;
  239.  
  240. typedef struct _PMTabFormatInfo {
  241.     unsigned long nNumChars;    // number of chars in the text run
  242.     unsigned long nOffset;        // char offset relative to the current
  243.                                 // text run (based on the targetCharOffset
  244.                                 // (which is relative to the entire story).
  245.     unsigned long nNumTabs;        // number of tabs in tabStop
  246.     PMTabStop tabStop[MAXTABS];
  247. } PMTabFormatInfo;
  248. //-----------------------------------------------------------
  249.  
  250. #ifdef __cplusplus
  251.  
  252. class CIText : public CIInterface
  253. {
  254. public:    
  255.     virtual            ~CIText() {};
  256.  
  257.     // Return text hole information for the given object
  258.     virtual PMErr        GetTextBlockInfo(PMOBJ_REC* pObjRec, PMTextBlockInfo* pTextBlockInfo) = 0;
  259.     // Return line information for the given story and line number
  260.     virtual    PMErr        GetTextLineBreakInfo(unsigned long storyID, unsigned long lineNumber, PMLineInfo* pLineBreakInfo) = 0;
  261.     // Return information for the given story
  262.     virtual    PMErr        GetTextStoryInfo(unsigned long storyID, PMStoryInfo* pStoryInfo) = 0;
  263.     // Return the first inline graphic found in the given
  264.     // story's list of ILGs
  265.     // This returns all inline graphics--both "valid" and "invalid" ones.
  266.     // "Invalid" inlines are those that have not been drawn since they were
  267.      // moved or possibly moved or will have been moved by composition.
  268.     virtual    PMErr        GetStoryFirstILG(unsigned long storyID, PMOBJ_REC* pILGObjRec) = 0;
  269.     // Return the next inline graphic found in the given
  270.     // story's list of ILGs
  271.     virtual    PMErr        GetStoryNextILG(PMOBJ_REC* pILGObjRec) = 0;
  272.     // ReadStoryTextRaw
  273.     // Given a story ID and a text range (offset & numChars),
  274.     // return a pointer buffer of raw text in ppTextBuf and
  275.     // the size of the buffer in buffer size.
  276.     // The offset parameter specifies the character offset
  277.     // into the given story. Use an offset of 0 to start
  278.     // at the beginning of the story.
  279.     // The nFormat parameter is used as follows:
  280.     //    0 to keep all non-printing characters
  281.     //    1 to delete all non-printing characters
  282.     //    2 to replace all non-printing characters with spaces
  283.     //    3 to substitute all non-printing ASCII characters as 
  284.     //        text export filter does
  285.     //
  286.     // IMPORTANT NOTES:
  287.      // ReadStoryTextRaw() will allocate the memory for the text.
  288.     // When done with the buffer, the plug-in must call FreeTextMemory()!!!
  289.     // Any calls to any of the ReadStoryTextXXX() methods will
  290.     // automatically free any previously allocated memory!
  291.     virtual    PMErr        ReadStoryTextRaw(unsigned long storyID, unsigned short nFormat,
  292.                                     unsigned long offset, unsigned long numChars,
  293.                                     char** ppTextBuf, unsigned long* bufSize) = 0;
  294.     // ReadStoryTextTagged
  295.     // Given a story ID and a text range (offset & numChars),
  296.     // return a pointer buffer of tagged text in ppTextBuf and
  297.     // the size of the buffer in buffer size.
  298.     // The offset parameter specifies the character offset
  299.     // into the given story. Use an offset of 0 to start
  300.     // at the beginning of the story.
  301.     // The nFormat parameter is used as follows:
  302.     //    0 to keep all non-printing characters
  303.     //    1 to delete all non-printing characters
  304.     //    2 to replace all non-printing characters with spaces
  305.     //    3 to substitute all non-printing ASCII characters as 
  306.     //        text export filter does
  307.     //
  308.     // IMPORTANT NOTES:
  309.      // ReadStoryTextTagged() will allocate the memory for the text.
  310.     // When done with the buffer, the plug-in must call FreeTextMemory()!!!
  311.     // Any calls to any of the ReadStoryTextXXX() methods will
  312.     // automatically free any previously allocated memory!
  313.     virtual    PMErr        ReadStoryTextTagged(unsigned long storyID, unsigned short nFormat,
  314.                                         unsigned long offset, unsigned long numChars,
  315.                                         char** ppTextBuf, unsigned long* bufSize) = 0;
  316.     // ReadStoryTextRTF
  317.     // Given a story ID and a text range (offset & numChars),
  318.     // return a pointer buffer of RTF text in ppTextBuf and
  319.     // the size of the buffer in buffer size.
  320.     // The offset parameter specifies the character offset
  321.     // into the given story. Use an offset of 0 to start
  322.     // at the beginning of the story.
  323.     // The nFormat parameter is ignored by ReadStoryTextRTF.
  324.     //
  325.     // IMPORTANT NOTES:
  326.      // ReadStoryTextRTF() will allocate the memory for the text.
  327.     // When done with the buffer, the plug-in must call FreeTextMemory()!!!
  328.     // Any calls to any of the ReadStoryTextXXX() methods will
  329.     // automatically free any previously allocated memory!
  330.     virtual    PMErr        ReadStoryTextRTF(unsigned long storyID, unsigned short nFormat,
  331.                                     unsigned long offset, unsigned long numChars,
  332.                                     char** ppTextBuf, unsigned long* bufSize) = 0;
  333.     // FreeTextMemory
  334.     // Frees any text buffer allocated by one of the 
  335.     // ReadStoryTextXXX() methods.
  336.     virtual    void    FreeTextMemory() = 0;
  337.  
  338.     virtual PMErr    GetTextSelection(unsigned long *pBlockID, unsigned long *pStoryID, 
  339.                         unsigned long *pOffset, unsigned long *pNumChars ) = 0;
  340.  
  341.      // RecomposeAllStories is called when every story in the pub needs to be recomposed.
  342.     // Some text attributes are pub level, hence changing them requires recomposing
  343.     // everything
  344.     virtual void    RecomposeAllStories()=0;
  345.  
  346.     // Setup the inlines in the current story. Only operates on current page.
  347.     virtual void    SetupStoryInlines()=0;
  348.  
  349.      // RecomposeStory compose all stories on current page or to end of pub
  350.     // bEndofPub is FALSE, this function will compose all stories on 
  351.     // the current page that need recomposing, starting from the 1st 
  352.     // hole in the story through the last hole of the story on the page.  
  353.     // bEndofPub is TRUE, this will compose each story to the end of the pub
  354.     virtual void    RecomposeStory(BOOL bEndofPub)=0;
  355.  
  356.     virtual PMErr    GetCharFormatInfo(unsigned long storyID, long targetCharOffset, 
  357.                                 PMCharFormatInfo *pCharFormatInfo)=0;
  358.  
  359.     virtual PMErr    GetParaFormatInfo(unsigned long storyID, long targetCharOffset,
  360.                                 PMParaFormatInfo *pParaFormatInfo)=0;
  361.  
  362.     virtual PMErr    GetTabFormatInfo(unsigned long storyID, long targetCharOffset,
  363.                                 PMTabFormatInfo *pTabFormatInfo)=0;
  364.  
  365.     virtual PMErr    GetLineBreakInfo(unsigned long storyID, long targetCharOffset,
  366.                                 PMLineInfo *pLineInfo)=0;
  367.  
  368.     virtual PMErr    GetStyleNameInfo(char *pStyleName, PMTabFormatInfo *pTabFormatInfo,
  369.                                 PMParaFormatInfo *pParaFormatInfo,
  370.                                 PMCharFormatInfo *pCharFormatInfo)=0;
  371. } ;
  372.  
  373. #endif    // __cplusplus
  374.  
  375. #endif
  376.